﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aspose.Pdf.Devices;

namespace Helpers
{
    public static class PDFHelper
    {

        /// <summary> 转换 PDF 的每一页为图片 </summary>
        /// <param name="pdffile"></param>
        /// <param name="savedirectory"></param>
        /// <returns></returns>
        public static List<string> ConvertToImages(string pdffile, string savedirectory = "")
        {
            // 返回的图片绝对路径集合
            List<string> images = new List<string>();

            // 获取 PDF 文件名称
            var pdfname = System.IO.Path.GetFileNameWithoutExtension(pdffile);

            // 如果指定了保存路径，则使用传入的路径，否则在 PDF 文件的同级创建同名文件夹当作保存路径
            savedirectory = string.IsNullOrWhiteSpace(savedirectory) ? System.IO.Path.GetDirectoryName(pdffile) : savedirectory;
            savedirectory = System.IO.Path.Combine(savedirectory, pdfname);
            // 防止保存的路径不存在因此创建保存文件夹
            Directory.CreateDirectory(savedirectory);

            using (var pdfd = new Aspose.Pdf.Document(pdffile))
            {
                var count = pdfd.Pages.Count;
                // Aspose.Pdf 的单页获取索引从 1 开始
                for (int i = 1; i <= count; i++)
                {
                    var imagefile = System.IO.Path.Combine(savedirectory, i + ".jpg");
                    try
                    {
                        //图片处理后的存放路径
                        using (var imageStream = new FileStream(imagefile, FileMode.Create))
                        {
                            var resolution = new Resolution(100);
                            var jpegDevice = new JpegDevice(resolution, 100);
                            jpegDevice.Process(pdfd.Pages[i], imageStream);
                            imageStream.Close();

                            images.Add(imagefile);
                        }
                    }
                    catch { }
                }
                pdfd.Dispose();
            }

            // 返回获取图片后的路径集合
            return images;
        }

    }
}
